//package cn.mw.cmdb.config;
//
//import cn.mw.microMonitorCommon.security.configuration.RedisJWKSource;
//import cn.mw.microMonitorCommon.util.RedisUtils;
//import com.nimbusds.jose.jwk.JWKSet;
//import com.nimbusds.jose.jwk.RSAKey;
//import com.nimbusds.jose.jwk.source.JWKSource;
//import com.nimbusds.jose.proc.SecurityContext;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.security.oauth2.jwt.JwtDecoder;
//import org.springframework.security.oauth2.server.authorization.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;
//
//import java.security.KeyPair;
//import java.security.KeyPairGenerator;
//import java.security.interfaces.RSAPrivateKey;
//import java.security.interfaces.RSAPublicKey;
//import java.util.UUID;
//
///**
// * @author swy
// * @date 2023/10/10 11:11
// */
//@Configuration(proxyBeanMethods = false)
//public class Oauth2Config {
//    /**
//     * 默认发放令牌
//     * @return
//     */
//    @Bean
//    public JWKSource<SecurityContext> jwkSource(RedisUtils redisUtils) throws Exception{
//        RedisJWKSource redisJWKSource = new RedisJWKSource(redisUtils);
//        if(!redisJWKSource.hasJwkSet()){
//            KeyPair keyPair = generateRsaKey();
//            RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
//            RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
//            RSAKey rsaKey = new RSAKey.Builder(publicKey)
//                    .privateKey(privateKey)
//                    .keyID(UUID.randomUUID().toString())
//                    .build();
//            JWKSet jwkSet = new JWKSet(rsaKey);
//            redisJWKSource.setJWKSet(jwkSet);
//        }
//
//        return redisJWKSource;
//    }
//
//    private static KeyPair generateRsaKey() {
//        KeyPair keyPair;
//        try {
//            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
//            keyPairGenerator.initialize(2048);
//            keyPair = keyPairGenerator.generateKeyPair();
//        }
//        catch (Exception ex) {
//            throw new IllegalStateException(ex);
//        }
//        return keyPair;
//    }
//
//    @Bean
//    public JwtDecoder jwtDecoder(JWKSource<SecurityContext> jwkSource) {
//        return OAuth2AuthorizationServerConfiguration.jwtDecoder(jwkSource);
//    }
//
//}
